#pragma once
class CNode
{
public: 
	CNode();
	~CNode();
	void Clear();
	CNode * getDown();
	void setDown(CNode * pNode);
	CNode * getRight();
	void setRight(CNode * pNode);
	void * getValue();
	void setValue(void * hValue);
	enum vsNodeType getNodeType();
	void setNodeType(enum vsNodeType nodeType);
	CNode * * getPackedNodes() const;
	void setPackedNodes(CNode * * ppNodes);
	XCHAR getFirstChar();
	XUINT32 getCount();
	HRESULT SplitAt(XUINT32 ichSplit);
	HRESULT RemoveChars(XUINT32 ichStart, XUINT32 cchCount);

	/*this+0x0*/ XUINT8 m_NodeType;
	/*this+0x1*/ XUINT8 m_cch;

	union
	{
		/*this+0x4*/ XCHAR aChar[8];
		struct
		{
			/*this+0x0*/ XCHAR chLast;
			/*this+0x2*/ XCHAR chFirst;
			/*this+0x4*/ CNode *pNodeZero;
		} PackInfo;
	} PackInfo;

private: 
	union
	{
		/*this+0x14*/ CNode * m_pDown;
		/*this+0x14*/ void * m_hValue;
		/*this+0x14*/ CNode * * m_ppPackedNodes;
	};

	/*this+0x18*/CNode * m_pRight;
};

